﻿// ReSharper disable CppClassCanBeFinal
#pragma once
#include <memory>
#include <string>
#include <filesystem>

class FShaderProgram;

class FMaterial
{
public:

	virtual ~FMaterial() = default;

	virtual bool Init();

	virtual void Use();

	virtual const std::string& GetVsSrcCode()const;  // NOLINT(modernize-use-nodiscard)
	virtual const std::string& GetFsSrcCode()const;  // NOLINT(modernize-use-nodiscard)

	virtual std::filesystem::path GetVsSrcPath()const;  // NOLINT(modernize-use-nodiscard)
	virtual std::filesystem::path GetFsSrcPath()const;  // NOLINT(modernize-use-nodiscard)

	std::shared_ptr<FShaderProgram> GetShader() { return  Shader; }

protected:

	enum class EInitShaderWayType
	{
		File,
		SrcCode,
	};

	EInitShaderWayType InitShaderWayType = EInitShaderWayType::SrcCode;

	std::shared_ptr<FShaderProgram> Shader;
};
